package com.tianji.promotion.utils;

import com.tianji.promotion.enums.MyLockType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 用于自定义锁
 */
@Retention(RetentionPolicy.RUNTIME)  //运行时生效
@Target(ElementType.METHOD)  //作用在方法上
public @interface MyLock {
    String name();

    long waitTime() default 1;

    long leaseTime() default -1;

    TimeUnit unit() default TimeUnit.SECONDS;

    //锁类型
    MyLockType lockType() default MyLockType.RE_ENTRANT_LOCK; //代表锁类型，默认为可重入锁

    //锁策略 ，默认为 重试超时后失败：有限的重试 + 抛异常
    MyLockStrategy lockStrategy() default MyLockStrategy.FAIL_AFTER_RETRY_TIMEOUT;
}